﻿#define _CRT_SECURE_NO_WARNINGS 1
//#include<stdio.h>
//int a = 0;
//int main()
//{
//	int a = 1;
//
//	printf("%d\n", a);
//	printf("%d\n", ::a);
//
//}

//#include<stdio.h>
//#include<stdlib.h>
//
////int rand = 10;
//
//int main()
//{
//	int rand = 1;
//	printf("%d\n", rand);
//	return 0;
//}
//#include<stdio.h>
//#include<stdlib.h>
//int x = 5;
////不影响变量的生命周期
//namespace N1
//{
//	int rand = 10;
//	int x = 1;
//}
//void func()
//{
//	int x = 2;
//	printf("%d\n", rand);
//	printf("%d\n", N1::x);
//}
//int main()
//{
//	func();
//	printf("%d\n", N1::rand);
//	printf("%d\n", x);
//
//	return 0;
//}
//
//
//#include<stdio.h>
//#include<stdlib.h>
//namespace bit
//{
//	int rand = 10;
//	int x = 1;
//
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//	//单链表
//	struct Node
//	{
//		struct Node* next;
//		int val;
//	};
//}
//namespace byte
//{
//	int Add(int left, int right)
//	{
//		return left * 10 + right * 10;
//	}
//
//	struct Node
//	{
//		struct Node* next;
//		struct Node* prev;
//		int val;
//	};
//}
//namespace N1
//{
//	int a;
//	int b;
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//	namespace N2
//	{
//		int c;
//		int d;
//		int Sub(int left, int right)
//		{
//			return left - right;
//		}
//	}
//}
//int main()
//{
//	//函数1
//	printf("%d\n", bit::Add(1, 2));
//	
//	//结构体类型
//	struct bit::Node node;
//	struct bit::Node dnode;
//
//	//嵌套，变量
//	N1::a = 1;
//	N1::N2::c = 2;
//
//	return 0;
//}

//#include<iostream>
//namespace N1
//{
//	int a;
//	double b;
//}
//using N1::a;
//int main()
//{
//	a = 10;
//	printf("%d\n", a);
//}

//第一个C++程序
//#include<iostream>
//int main()
//{
//	std::cout << "Hello world!!!" << std::endl;
//
//	return 0;
//}
//
//#include<iostream>
//using namespace std;//将C++官方标准库的成员引入
////日常练习，小程序可以这么用，项目最好不要这么用
//int main()
//{
//	cout<<"Hello world!!!"<<endl;
//
//	return 0;
//}

//#include<iostream>
//using std::cout;//指定展开
//int main()
//{
//	cout << "Hello world!!!" << std::endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	//C++可以自动识别变量的类型
//
//	//<<流插入运算符
//
//	//输出到控制台
//	cout << "Hello world" << endl;
//	cout << "Hello world" << '\n';
//
//	int a;
//	double b;
//	char c;
//
//	//>>流提取运算符
//
//	//输入
//	cin >> a;
//	cin >> b >> c;
//	//输出到控制台
//	cout << a << endl;
//	cout << b <<" "<<c<<endl;
//
//	//若要保留一位小数：还是使用C语言比较方便
//	printf("%.1f\n", b);
//
//	return 0;
//}

//缺省参数
//#include<iostream>
//using namespace std;
//
//void Print(int a=5)
//{
//	cout << a << endl;
//}
//int main()
//{
//    Print();//没有指定实参，使用（缺省参数）参数的默认值
//	Print(10);//指定了实参，使用指定实参
//
//	return 0;
//}

//全缺省参数
//#include<iostream>
//using namespace std;
//void Print(int a = 1, int b = 2, int c = 3)
//{
//	cout << a << endl;
//	cout << b << endl;
//	cout << c << endl;
//
//}
//int main()
//{
//	Print();
//
//	return 0;
//}

//半缺省参数
//#include<iostream>
//using namespace std;
//void Print(int a , int b, int c=3)
//{
//	cout << a << b << c << endl;
//}
//int main()
//{
//	Print(1 ,2,3);
//	Print(1, 2, 5);
//
//	return 0;
//}

//函数重载
//#include<iostream>
//using namespace std;
//double Add(int a, double b)
//{
//	return a + b;
//}
//double Add(double a, double b)
//{
//	return a + b;
//}
//void swap(int* px, int* py)
//{
//	int tmp = *px;
//	*px = *py;
//	*py = tmp;
//}
//void swap(double* px, double* py)
//{
//	double tmp = *px;
//	*px = *py;
//	*py = tmp;
//}
//int main()
//{
//	cout << Add(5, 2.2) << endl;
//	cout << Add(2.2, 2.2) << endl;
//
//	int a = 2, b = 3;
//	swap(&a, &b);
//	cout << a << b << endl;
//
//	double c = 1.1, d = 2.2;
//	swap(&c, &d);
//	cout << c << d << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//void fun()
//{
//	cout << "fun()" << endl;
//}
//void fun(int a)
//{
//	cout << a << endl;
//}
//int main()
//{
//	fun();
//	fun(10);
//}



//引用&
//#include<iostream>
//using namespace std;
//int main()
//{
//	int a = 10;
//	int& b = a;
//
//	cout << a << endl;
//	cout << b << endl;
//
//	b = 20;
//	cout << a << endl;
//	cout << b << endl;
//
//	return 0;
//}
//#include<iostream>
//using namespace std;
//void Swap(int* a, int* b)
//{
//	int tmp = *a;
//	*a = *b;
//	*b = tmp;
//}
//void Swap2(int& c, int& d)
//{
//	int tmp = c;
//	c = d;
//	d = tmp;
//}
//int main()
//{
//	int a = 2, b = 3;
//	Swap2(a, b);
//
//	cout << a << " " << b << endl;
//}

//正确使用引用返回
//#include<iostream>
//using namespace std;
//int fun1()
//{
//	int n = 0;
//	n++;
//	return n;//会创建一个临时变量，int tmp，保留n的值，不然函数调用完后会被销毁
//	//本质上还是通过地址访问数据
//}
//int& fun2()
//{
//	static int n = 0;//一定要加static，这样变量n处于静态区，函数销毁时，n就不会被销毁。
//	n++;
//	return n;//临时变量名，int& tmp=n;
//}
//int main()
//{
//	int ret1 = fun1();
//	int ret2 = fun2();
//	cout << ret1 << endl;
//	cout << ret2 << endl;
//
//	return 0;
//}

//int& Add(int a, int b)
//{
//	int c = a + b;
//	return c;
//}
//int main()
//{
//	int& ret = Add(1, 2);
//	Add(3, 4);
//	cout << "Add(1, 2) is :" << ret << endl;//7
//	return 0;
//}

//auto C++11引入 小语法
//#include <map>
//
//// C++11 小语法 -- 语法糖
//int main()
//{
//	int a = 10;
//	// 根据a的类型推导b的类型
//	auto b = a;
//
//	std::map<std::string, std::string> m{ { "apple", "苹果" }, { "orange", "橙子" },
//	{ "pear", "梨" } };
//
//	// auto是方便类型下面的地方
//	//std::map<std::string, std::string>::iterator it = m.begin();
//	auto it = m.begin();
//
//	int array[] = { 1, 2, 3, 4, 5 };
//	for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)
//		cout << array[i] << " ";
//
//	cout << endl;
//
//	// 范围for遍历
//	// 依次取array中数据赋值给e 自动判断结束，自动迭代
//	for (auto e : array)//自动遍历数组
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	return 0;
//}

//宏函数与inline
//#include<iostream>
//using namespace std;
//
//#define Add(x,y) ((x)+(y))
//
//int main()
//{
//	int ret = Add(10, 20);
//	cout << ret << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//inline int Add(int x, int y)
//{
//	return x + y;
//}
//int main()
//{
//	int ret = Add(10, 20);
//	cout << ret << endl;
//
//	return 0;
//}

//typedef char* pstring;
//int main()
//{
//	const pstring p1;//char* const p1;
//	const pstring* p2;
//
//	return 0;
//}

//auto
//#include<iostream>
//using namespace std;
//int TestAuto()
//{
//	return 10;
//}
//int main()
//{
//	int a = 10;
//	auto b = a;
//	auto c = 'a';
//	auto d = TestAuto();
//
//	cout << typeid(b).name() << endl;
//	cout << typeid(c).name() << endl;
//	cout << typeid(d).name() << endl;
//
//	int arr[] = { 1,2,3 };
//	for (auto& e : arr)
//		e *= 2;
//
//	for (auto e : arr)
//		cout<< e << " ";
//
//	return 0;
//}